import request from '@/config/axios'

// 阶段和轮次信息VO
export interface StageRoundVO {
  name: string // 阶段名称(初评,终评)
  voteState: 'NOT_STARTED' | 'IN_PROGRESS' | 'END' // 阶段状态 NOT_STARTED=未开始 IN_PROGRESS=进行中 END=已结束
  round: RoundInfo[] // 当前轮次
  sort: number // 排序值
  // voteState: number // 阶段状态 1=未开始 2=进行中 3=已结束
}

// 轮次信息
export interface RoundInfo {
  roundId: string // 轮次Id
  name: string // 轮次名称
  currentRound: boolean // 是否是进行中的轮次
  requireDebate: boolean // 是否是答辩轮
  debateId: string // 是答辩轮,答辩时间设置ID
  isJudgesConfirm: boolean // 是否开启评委确认结果(评委端是否显示评委确认结果按钮)
  isJudgesConfirmBot: boolean // 是否可以开启评委确认结果(管理端是否显示评委确认结果按钮的字段)
  isParallelBot: boolean // 是否显示平票轮按钮
  reviewMethod: 'VOTE' | 'SORT' | 'SCORE' // 评审方式
  sort: number // 排序值
}

// getCandidateAdmin的入参
export interface CandidatePageReqVO extends PageParam {
  awardsInstanceId: string // 评奖ID
  studentLevel: string // 培养层次
  awardLevel: string // 评奖层次
  jobCode: string // 学号
  major: string // 专业
  awardMajor: string // 评奖专业
  studentName: string // 姓名
  accountType: string // 学生类别
  researchDept: string // 研究部
  roundId: string // 终评轮次ID，初评阶段可不传
}

// getCandidateAdmin的返回结构
export interface CandidateAdminRespVO {
  id: string // 候选人ID
  accountId: number // 候选人账号ID
  awardId: string // 评奖ID
  awardName: string // 奖项标题
  year: string // 年度
  studentLevel: string // 培养层次
  templateId: string // 奖项ID
  templateName: string // 奖项
  awardLevel: string // 评奖层次
  jobCode: string // 学号
  major: string // 专业
  studentName: string // 姓名
  awardMajor: string // 评奖专业
  gender: string // 性别
  accountType: string // 学生类别
  mentorId: number // 导师ID
  mentorName: string // 导师姓名
  mentorCode: string // 导师工号
  secondaryMentorName: string // 辅导师姓名
  researchDeptId: number // 研究部ID
  researchDept: string // 研究部
  processStatus: number // 导师审核流程状态 0=审核中 1=通过 2=不通过 3=撤回
  qualityStatus: number // 资格审查状态 0=未审查 1=通过 2=不通过 3=无需资格审查
  applySource: number // 来源 1=学生申请 2=表格导入 3=其他奖项导入
  attachment: string // 申请附件
  historyAwardsJson: string // 所获优选评选奖项json
  selfIntroduction: string // 自我介绍
  initialScore: string // 初评成绩
  finalScore: string // 终评成绩
  isInitialJudge: string // 导师是否是初评评委
  isFinalJudge: string // 导师是否是终评评委
}

export interface StudentAwardResultPageReqVO extends PageParam {
  awardsInstanceId: string // 评奖ID
  roundId: string // 轮次ID
  isConfirm?: boolean // 是否提交结果筛选
}

// 学生获奖结果VO
export interface StudentAwardResultResVO {
  id: string // 主键
  jobCode: string // 学号
  studentName: string // 姓名
  major: string // 专业
  awardsCandidateId: string // 候选人ID
  awardsInstanceId: string // 评奖ID
  awardLevel: string // 评奖层次
  value: string // 本轮成绩
  initialScore: string // 初评成绩
  finalScore: string // 终评成绩
  sameAmount: number // 平票投票数
  sort: number // 排序值
  adminConfirm: boolean // 管理员是否确认（已废弃）
  isNext: boolean // 是否需要终评
  isWin: boolean // 是否获奖
  differenceSelection: boolean // 是否上级单位差额评选
  isCoordinate: boolean // 是否有平票情况
}

// 师昌绪专用-学生获奖结果VO
export interface ScxStudentAwardResultResVO {
  id: string // 主键
  jobCode: string // 学号
  studentName: string // 姓名
  major: string // 专业
  awardsCandidateId: string // 候选人ID
  awardsInstanceId: string // 评奖ID
  awardLevel: string // 评奖层次
  initialScore: string // 初评成绩
  finalScore: string // 终评成绩
  value: string // 推荐等级
  adminConfirm: boolean // 管理员是否确认（已废弃）
  isNext: boolean // 是否需要终评
  isWin: boolean // 是否获奖
  differenceSelection: boolean // 是否上级单位差额评选
  isCoordinate: boolean // 是否有平票情况
}

// 评委-评审现场 候选人VO
export interface CandidateJudgesRespVO {
  id: string // 候选人ID
  accountId: number // 候选人账号ID
  awardId: string // 评奖ID
  studentLevel: string // 培养层次
  awardLevel: string // 评奖层次
  jobCode: string // 学号
  major: string // 专业
  studentName: string // 姓名
  awardMajor: string // 评奖专业
  gender: string // 性别
  attachment: string // 申请附件
  historyAwardsJson: string // 所获优选评选奖项json
  selfIntroduction: string // 自我介绍
  isDefense: string // 是否答辩安排
  debateTime: string // 答辩时间
  scientificPayoffs: string // 科研成果
  score: string // 成绩
}

// 评委-投票/推荐选项VO
export interface OptionVO {
  label: string // 选项名称
  value: string // 选项值
  isDisable: boolean // 是否禁用
  remaining: string // 剩余名额
  disableReason: string // 禁用原因
}

// 评委-投票/推荐结果确认DTO
export interface VoteConfirmDTO {
  awardsInstanceId: string // 评奖实例ID
  awardsCandidateId: string // 候选人ID
  value?: string // 选择的结果
}

// 评委提交明细请求VO
export interface JudgesSubmitDetailsPageReqVO extends PageParam {
  awardsInstanceId: string // 评奖ID
  roundId: number // 轮次ID
  awardsCandidateId: string // 候选人ID
}

// 评委提交明细VO
export interface JudgesSubmitDetailsResVO {
  judgesId: string // 评委ID
  mentorId: number // 导师ID
  mentorName: string // 导师姓名
  mentorCode: string // 导师工号
  value: string // 选择结果
  confirmResult: boolean // 是否确认结果
}

// 评委确认名单VO
export interface JudgesSubmitResVO {
  judgesId: string // 评委ID
  mentorId: number // 导师ID
  mentorName: string // 导师姓名
  mentorCode: string // 导师工号
  confirmResult: boolean // 是否确认结果
}

// SCX-评委初评展示的剩余名额 VO
export interface SCXInstanceInitialRemainingVO {
  // 博士一等剩余名额
  doctorFirstRemaining: number
  // 博士二等剩余名额
  doctorSecondRemaining: number
  // 博士三等剩余名额
  doctorThirdRemaining: number
  // 硕士一等剩余名额
  masterFirstRemaining: number
}

// 评委端剩余名额VO
export interface StageRoundReqQuotaVO {
  name: string // 名额名称
  quota: number // 剩余名额
  amount: number // 名额
  key: string // 名额key
}

// 评委端进入评审现场前的校验VO
export interface JudgesSceneCheckVO {
  isAvailable: boolean // 是否能进入评审现场 true=能进 false=不能进
  reason: string // 不能进入的原因
}

// 评审现场(主流程) API
export const ReviewSceneApi = {
  // 获取阶段,轮次信息
  getStageRound: async (instanceId: string) => {
    return await request.get({
      url: `/awards/review-host/get-stage-round?awards_instance_id=${instanceId}`
    })
  },

  // 管理员获取阶段轮次评审学生
  getCandidateAdmin: async (data: Partial<CandidatePageReqVO>) => {
    return await request.post({
      url: '/awards/review-host/get-candidate-admin',
      data
    })
  },

  // 查看结果
  getStudentAwardResult: async (params: StudentAwardResultPageReqVO) => {
    return await request.get({
      url: `/awards/review-host/get-student-award-result`,
      params
    })
  },

  // 管理端确认结果
  confirmStudentAwardResult: async (instanceId: string, roundId: string) => {
    return await request.get({
      url: `/awards/review-host/confirm-student-award-result?awards_instance_id=${instanceId}&round_id=${roundId}`
    })
  },

  // 导出确认结果
  exportStudentAwardResult: async (params) => {
    return await request.download({
      url: `/awards/review-host/export-student-award-result`,
      params
    })
  },

  // 管理端-查看单独学生评委评审明细 返回分页JudgesSubmitDetailsResVO
  getJudgesSubmitDetails: async (params: JudgesSubmitDetailsPageReqVO) => {
    return await request.get({
      url: `/awards/review-host/get-judges-submit-details`,
      params
    })
  },

  // 开启评委确认结果 返回Boolean
  openJudgesResults: async (awardsInstanceId: string, roundId: string) => {
    return await request.get({
      url: `/awards/review-host/open-judges-results?awards_instance_id=${awardsInstanceId}&round_id=${roundId}`
    })
  },

  // 确认评委名单 返回分页JudgesSubmitResVO
  getJudgesResults: async (params: StudentAwardResultPageReqVO) => {
    return await request.get({
      url: `/awards/review-host/get-judges-results`,
      params
    })
  },

  // ========== 评委 ===========
  // 查询学生列表
  getCandidateJudges: async (data: Partial<CandidatePageReqVO>) => {
    return await request.post({ url: `/awards/review-host/get-candidate-judges`, data })
  },

  // 评委-查询SCX初评剩余名额
  getScxInitialRemainingCount: async (id: string) => {
    return await request.get({ url: `/awards/instance/get-initial-remaining`, params: { id } })
  },

  // 评委-获取阶段轮次剩余名额
  getJudgesStageRoundQuota: async (awards_instance_id: string, round_id: string) => {
    return await request.get<StageRoundReqQuotaVO[]>({
      url: '/awards/review-host/get-judges-stage-round-quota',
      params: { awards_instance_id, round_id }
    })
  },

  // 查询投票/推荐选项
  getVoteOptions: async (awardsInstanceId: string, awardsCandidateId: string) => {
    return await request.post({
      url: `/awards/review-host/get-option`,
      data: {
        awardsInstanceId,
        awardsCandidateId
      }
    })
  },

  // 提交投票/推荐结果
  submitVote: async (data: VoteConfirmDTO) => {
    return await request.post({ url: `/awards/review-host/submit`, data })
  },

  // 评委确认结果 返回Boolean
  judgesConfirmStudentAwardResult: async (awardsInstanceId: string, roundId: string) => {
    return await request.get({
      url: `/awards/review-host/judges-confirm-student-award-result?awards_instance_id=${awardsInstanceId}&round_id=${roundId}`
    })
  },

  // 评委确认指定轮次投票
  judgesConfirmRound: async (awardsInstanceId: string, roundId: string) => {
    return await request.put({
      url: `/awards/review-host/judges-confirm-round`,
      data: { awardsInstanceId, roundId }
    })
  },

  // 获取评委是否确认指定轮次投票
  isJudgesConfirmed: async (awardsInstanceId: string, roundId: string) => {
    return await request.get({
      url: `/awards/review-host/is-judges-confirm-round`,
      params: { awardsInstanceId, roundId }
    })
  },

  // 评委端-评委是否已确认结果
  isJudgesConfirmResult: async (awards_instance_id: string, round_id: string) => {
    return await request.get({
      url: `/awards/review-host/is-judges-confirm-student-award-result`,
      params: { awards_instance_id, round_id }
    })
  },

  // 管理端获取评委提交结果情况 返回JudgesSubmitResVO[]
  getJudgesConfirmRoundList: async (params: StudentAwardResultPageReqVO) => {
    return await request.get({
      url: `/awards/review-host/get-judges-confirm-round`,
      params
    })
  },

  // 评委端-是否能进入评审现场的校验 返回JudgesSceneCheckVO
  checkJudgesSceneAvailable: async (instanceId: string) => {
    return await request.get({
      url: `/awards/review-host/check-judges-scene?awards_instance_id=${instanceId}`
    })
  }
}
